/*
Cassia: Catalogador SIB sobre Informaci�n Ambiental-
Copyright (C) 2010 Benjamin Rodriguez <benjamin.a.rodriguez@gmail.com>

Este programa es software libre: usted puede redistribuirlo y/o modificarlo 
bajo los t�rminos de la Licencia P�blica General GNU publicada 
por la Fundaci�n para el Software Libre, ya sea la versi�n 3 
de la Licencia, o (a su elecci�n) cualquier versi�n posterior.

Este programa se distribuye con la esperanza de que sea �til, pero 
SIN GARANT�A ALGUNA; ni siquiera la garant�a impl�cita 
MERCANTIL o de APTITUD PARA UN PROP�SITO DETERMINADO. 
Consulte los detalles de la Licencia P�blica General GNU para obtener 
una informaci�n m�s detallada. 

Deber�a haber recibido una copia de la Licencia P�blica General GNU 
junto a este programa. 

En caso contrario, consulte <http://www.gnu.org/licenses/>.

 */
package org.humboldt.cassia.core;

import java.util.ArrayList;
import java.util.Collection;

import javax.jdo.Extent;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
import javax.jdo.Query;
import javax.jdo.Transaction;

//import org.humboldt.cassia.core.jdo.Conjunto;
import org.apache.log4j.Logger;
import org.humboldt.cassia.core.exceptions.CassiaException;
import org.humboldt.cassia.core.jdo.EstadoCron;

//import org.humboldt.cassia.core.jdo.PerfilDocumentacion;

/**
 * Clase encargada de las operaciones de actualizaci�n de la informaci�n de
 * estandares
 * 
 * @author Benjamin A. Rodriguez R. benjamin.a.rodriguez@gmail.com
 * 
 */
public class FacadeOperacionesEstadoWebDavCassiaCore {

	private static Logger logger = Logger.getLogger(FacadeOperacionesEstadoWebDavCassiaCore.class);

	private PersistenceManagerFactory factory;

	public PersistenceManagerFactory getFactory() {
		return factory;
	}

	public void setFactory(PersistenceManagerFactory factory) {
		this.factory = factory;
	}

	/**
	 * Registra el estandar en la Base de datos
	 * 
	 * @param estandar
	 * @param atributoPrincipal
	 * @param niveles
	 * @param usuario
	 */
	public void crearEstadoWebDav(EstadoCron estadowebdav) {
		PersistenceManager pm = factory.getPersistenceManager();
		Transaction tx = null;
		try {
			tx = pm.currentTransaction();
			tx.begin();
			pm.makePersistent(estadowebdav);
			tx.commit();

		} catch (Throwable e) {
			logger.error("Error CASSIA", e);
			if (tx != null)
				tx.rollback();
			throw new CassiaException(e);
		} finally {
			pm.close();
		}
	}

	public void actualizarEstadoWebDav(EstadoCron estadowebdav) {

		PersistenceManager pm = factory.getPersistenceManager();

		Transaction tx = null;
		try {
			EstadoCron estadowebdavAnterior = new EstadoCron();
			Extent e = pm.getExtent(EstadoCron.class, true);
			Query q = pm.newQuery(e, "idobjeto == " + estadowebdav.getIdobjeto() + " && idtipoObjeto ==" + estadowebdav.getIdtipoObjeto());
			Collection cllestadowebdav = (Collection) q.execute();

			if (cllestadowebdav != null && cllestadowebdav.size() > 0) {
				estadowebdavAnterior = (EstadoCron) cllestadowebdav.iterator().next();
				tx = pm.currentTransaction();
				tx.begin();
				estadowebdavAnterior.setIdtipoEstado(estadowebdav.getIdtipoEstado());
				estadowebdavAnterior.setIdobjeto(estadowebdav.getIdobjeto());
				estadowebdavAnterior.setIdtipoObjeto(estadowebdav.getIdtipoObjeto());
				estadowebdavAnterior.setObjeto(estadowebdav.getObjeto());

				estadowebdavAnterior.setWebdav(estadowebdav.getWebdav());
				pm.makePersistent(estadowebdavAnterior);
				tx.commit();
			}
		} catch (Throwable e) {
			logger.error("Error CASSIA", e);
			if (tx != null)
				tx.rollback();
			throw new CassiaException(e);
		} finally {
			pm.close();
		}
	}

	public Collection<EstadoCron> consultarEstadoWebDav(int tipoObjeto) {
		PersistenceManager pm = factory.getPersistenceManager();
		Collection<EstadoCron> c = new ArrayList<EstadoCron>();
		try {
			Extent e = pm.getExtent(EstadoCron.class, true);
			Query q = pm.newQuery(e, " webdav!=0 && idtipoObjeto == " + tipoObjeto);
			c = (Collection) q.execute();
			//System.out.println("CONSULTANDO ESTADOWEBDAV " + q + " RES=>" + c);
			e.closeAll();
		} catch (Throwable e) {
			logger.error("Error CASSIA", e);
			throw new CassiaException(e);
		} finally {
			pm.close();
		}
		return c;
	}

}
